/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.financeiro.entity;

import br.jm.financeiro.filter.ConfiguraCampoAnnotation;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

/**
 *
 * @author joao
 */
@Entity
@Table(name = "processo", catalog = "salao", schema = "public")
@NamedQueries({
    @NamedQuery(name = "Processo.findAll", query = "SELECT p FROM Processo p")})
public class Processo implements Serializable, Comparable<Processo> {
    
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "processo_id_processo_seq")
    @SequenceGenerator(name = "processo_id_processo_seq", sequenceName = "processo_id_processo_seq", initialValue = 1, allocationSize = 1)
    @Basic(optional = false)
    @NotNull
    @Column(name = "id_processo", nullable = false)
    private Integer idProcesso;
    @Column(name = "dat_update")
    @Temporal(TemporalType.TIMESTAMP)
    private Date datUpdate;
    @Size(max = 40)
    @Column(name = "loc_bairro", length = 40)
    private String locBairro;
    @Column(name = "loc_dat_desde")
    @Temporal(TemporalType.DATE)
    private Date locDatDesde;
    @Size(max = 100)
    @Column(name = "loc_descricao", length = 100)
    private String locDescricao;
    @Size(max = 100)
    @Column(name = "loc_email", length = 100)
    private String locEmail;
    @Size(max = 100)
    @Column(name = "loc_endereco", length = 100)
    private String locEndereco;
    @Size(max = 100)
    @Column(name = "loc_funciionario", length = 100)
    private String locFunciionario;
    @Size(max = 10)
    @Column(name = "loc_ramal", length = 10)
    private String locRamal;
    @Size(max = 20)
    @Column(name = "loc_rf", length = 20)
    private String locRf;
    @Size(max = 20)
    @Column(name = "loc_telefone", length = 20)
    private String locTelefone;
    @Size(max = 100)
    @Column(name = "loc_transito", length = 100)
    private String locTransito;
    @Size(max = 100)
    @Column(name = "loc_unidade", length = 100)
    private String locUnidade;
    @Size(max = 100)
    @Column(name = "proc_assunto", length = 100)
    private String procAssunto;
    @Size(max = 100)
    @Column(name = "proc_interessado", length = 100)
    private String procInteressado;
    @Size(max = 100)
    @Column(name = "proc_motivo", length = 100)
    private String procMotivo;
    @Size(max = 40)
    @Column(name = "sit_comunique", length = 40)
    private String sitComunique;
    @Column(name = "sit_data_situacao")
    @Temporal(TemporalType.DATE)
    private Date sitDataSituacao;
    @Size(max = 100)
    @Column(name = "sit_descricao", length = 100)
    private String sitDescricao;
    @Size(max = 100)
    @Column(name = "sit_despacho", length = 100)
    private String sitDespacho;
    @Size(max = 20)
    @Column(name = "sit_dom", length = 20)
    private String sitDom;
    @Column(name = "sit_situacao_data_descricao")
    @Temporal(TemporalType.DATE)
    private Date sitSituacaoDataDescricao;
    @Column(name = "sit_vencimento")
    @Temporal(TemporalType.DATE)
    private Date sitVencimento;
    @Size(max = 50)
    @Column(name = "com_numero", length = 50)
    private String comNumero;
    @Column(name = "com_data")
    @Temporal(TemporalType.DATE)
    private Date comData;
    @Column(name = "com_texto", columnDefinition = "text")
    @ConfiguraCampoAnnotation(tipo = "String", pesquisa = "numProcesso.numProcesso", campo = "num_processo", nomeTabela = "processo", nomeTabelJoin = "empreendimento_lote")
    private String comTexto;
    @Column(name = "dat_atendido")
    @Temporal(TemporalType.DATE)
    private Date datAtendido;
    @Column(name = "dat_prorrogacao1")
    @Temporal(TemporalType.DATE)
    private Date datProrrogacao1;
    @Column(name = "dat_prorrogacao2")
    @Temporal(TemporalType.DATE)
    private Date datProrrogacao2;
    @Column(name = "dat_prorrogacao3")
    @Temporal(TemporalType.DATE)
    private Date datProrrogacao3;
    @Column(name = "dat_concessao1")
    @Temporal(TemporalType.DATE)
    private Date datConcessao1;
    @Column(name = "dat_concessao2")
    @Temporal(TemporalType.DATE)
    private Date datConcessao2;
    @Column(name = "dat_concessao3")
    @Temporal(TemporalType.DATE)
    private Date datConcessao3;
    @Column(name = "dsc_obs", columnDefinition = "text")
    private String dscObs;
    @Size(max = 10)
    @Column(name = "emp_color", length = 10)
    private String empColor;
    @Size(max = 50)
    @Column(name = "des_descricao", length = 50)
    private String desDescricao;
    @Size(max = 40)
    @Column(name = "des_despacho", length = 40)
    private String desDespacho;
    @Column(name = "des_data")
    @Temporal(TemporalType.DATE)
    private Date desData;
    @Size(max = 100)
    @Column(name = "des_motivo", length = 100)
    private String desMotivo;
    @Size(max = 50)
    @Column(name = "num_triunfo", length = 50)
    private String numTriunfo;
    
    @JoinColumn(name = "id_empreendimento_lote", referencedColumnName = "id_empreendimento_lote", nullable = true)
    @ManyToOne(optional = true)
    private EmpreendimentoLote idEmpreendimentoLote;
    
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idProcesso")
    @LazyCollection(LazyCollectionOption.FALSE)
    @org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    @ConfiguraCampoAnnotation(tipo = "String", pesquisa = "numProcesso.idEmpreendimento.idCliente.nomCliente", campo = "nom_cliente", nomeTabela = "empreendimento", nomeTabelJoin = "cliente")
    private List<ProcessoSituacao> processoSituacaoList;

    public Processo() {
    }

    public Processo(Integer idProcesso) {
        this.idProcesso = idProcesso;
    }

    public Integer getIdProcesso() {
        return idProcesso;
    }

    public void setIdProcesso(Integer idProcesso) {
        this.idProcesso = idProcesso;
    }

    public Date getDatUpdate() {
        return datUpdate;
    }

    public void setDatUpdate(Date datUpdate) {
        this.datUpdate = datUpdate;
    }

    public String getLocBairro() {
        return locBairro;
    }

    public void setLocBairro(String locBairro) {
        this.locBairro = locBairro;
    }

    public Date getLocDatDesde() {
        return locDatDesde;
    }

    public void setLocDatDesde(Date locDatDesde) {
        this.locDatDesde = locDatDesde;
    }

    public String getLocDescricao() {
        return locDescricao;
    }

    public void setLocDescricao(String locDescricao) {
        this.locDescricao = locDescricao;
    }

    public String getLocEmail() {
        return locEmail;
    }

    public void setLocEmail(String locEmail) {
        this.locEmail = locEmail;
    }

    public String getLocEndereco() {
        return locEndereco;
    }

    public void setLocEndereco(String locEndereco) {
        this.locEndereco = locEndereco;
    }

    public String getLocFunciionario() {
        return locFunciionario;
    }

    public void setLocFunciionario(String locFunciionario) {
        this.locFunciionario = locFunciionario;
    }

    public String getLocRamal() {
        return locRamal;
    }

    public void setLocRamal(String locRamal) {
        this.locRamal = locRamal;
    }

    public String getLocRf() {
        return locRf;
    }

    public void setLocRf(String locRf) {
        this.locRf = locRf;
    }

    public String getLocTelefone() {
        return locTelefone;
    }

    public void setLocTelefone(String locTelefone) {
        this.locTelefone = locTelefone;
    }

    public String getLocTransito() {
        return locTransito;
    }

    public void setLocTransito(String locTransito) {
        this.locTransito = locTransito;
    }

    public String getLocUnidade() {
        return locUnidade;
    }

    public void setLocUnidade(String locUnidade) {
        this.locUnidade = locUnidade;
    }

    public String getProcAssunto() {
        return procAssunto;
    }

    public void setProcAssunto(String procAssunto) {
        this.procAssunto = procAssunto;
    }

    public String getProcInteressado() {
        return procInteressado;
    }

    public void setProcInteressado(String procInteressado) {
        this.procInteressado = procInteressado;
    }

    public String getProcMotivo() {
        return procMotivo;
    }

    public void setProcMotivo(String procMotivo) {
        this.procMotivo = procMotivo;
    }

    public String getSitComunique() {
        return sitComunique;
    }

    public void setSitComunique(String sitComunique) {
        this.sitComunique = sitComunique;
    }

    public Date getSitDataSituacao() {
        return sitDataSituacao;
    }

    public void setSitDataSituacao(Date sitDataSituacao) {
        this.sitDataSituacao = sitDataSituacao;
    }

    public String getSitDescricao() {
        return sitDescricao;
    }

    public void setSitDescricao(String sitDescricao) {
        this.sitDescricao = sitDescricao;
    }

    public String getSitDespacho() {
        return sitDespacho;
    }

    public void setSitDespacho(String sitDespacho) {
        this.sitDespacho = sitDespacho;
    }

    public String getSitDom() {
        return sitDom;
    }

    public void setSitDom(String sitDom) {
        this.sitDom = sitDom;
    }

    public Date getSitSituacaoDataDescricao() {
        return sitSituacaoDataDescricao;
    }

    public void setSitSituacaoDataDescricao(Date sitSituacaoDataDescricao) {
        this.sitSituacaoDataDescricao = sitSituacaoDataDescricao;
    }

    public Date getSitVencimento() {
        return sitVencimento;
    }

    public void setSitVencimento(Date sitVencimento) {
        this.sitVencimento = sitVencimento;
    }

    public String getComNumero() {
        return comNumero;
    }

    public void setComNumero(String comNumero) {
        this.comNumero = comNumero;
    }

    public Date getComData() {
        return comData;
    }

    public void setComData(Date comData) {
        this.comData = comData;
    }

    public String getComTexto() {
        return comTexto;
    }

    public void setComTexto(String comTexto) {
        this.comTexto = comTexto;
    }

    public EmpreendimentoLote getIdEmpreendimentoLote() {
        return idEmpreendimentoLote;
    }

    public void setIdEmpreendimentoLote(EmpreendimentoLote idEmpreendimentoLote) {
        this.idEmpreendimentoLote = idEmpreendimentoLote;
    }


    public List<ProcessoSituacao> getProcessoSituacaoList() {
        return processoSituacaoList;
    }

    public void setProcessoSituacaoList(List<ProcessoSituacao> processoSituacaoList) {
        this.processoSituacaoList = processoSituacaoList;
    }

    public String getEmpColor() {
        return empColor;
    }

    public String getDscObs() {
        return dscObs;
    }

    public void setDscObs(String dscObs) {
        this.dscObs = dscObs;
    }

    public void setEmpColor(String empColor) {
        this.empColor = empColor;
    }

    public String getNumTriunfo() {
        return numTriunfo;
    }

    public void setNumTriunfo(String numTriunfo) {
        this.numTriunfo = numTriunfo;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idProcesso != null ? idProcesso.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Processo)) {
            return false;
        }
        Processo other = (Processo) object;
        if ((this.idProcesso == null && other.idProcesso != null) || (this.idProcesso != null && !this.idProcesso.equals(other.idProcesso))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.jm.financeiro.entity.Processo[ idProcesso=" + idProcesso + " ]";
    }

    public Date getDatAtendido() {
        return datAtendido;
    }

    public void setDatAtendido(Date datAtendido) {
        this.datAtendido = datAtendido;
    }

    public Date getDatProrrogacao1() {
        return datProrrogacao1;
    }

    public void setDatProrrogacao1(Date datProrrogacao1) {
        this.datProrrogacao1 = datProrrogacao1;
    }

    public Date getDatProrrogacao2() {
        return datProrrogacao2;
    }

    public void setDatProrrogacao2(Date datProrrogacao2) {
        this.datProrrogacao2 = datProrrogacao2;
    }

    public Date getDatProrrogacao3() {
        return datProrrogacao3;
    }

    public void setDatProrrogacao3(Date datProrrogacao3) {
        this.datProrrogacao3 = datProrrogacao3;
    }

    public Date getDatConcessao1() {
        return datConcessao1;
    }

    public void setDatConcessao1(Date datConcessao1) {
        this.datConcessao1 = datConcessao1;
    }

    public Date getDatConcessao2() {
        return datConcessao2;
    }

    public void setDatConcessao2(Date datConcessao2) {
        this.datConcessao2 = datConcessao2;
    }

    public Date getDatConcessao3() {
        return datConcessao3;
    }

    public void setDatConcessao3(Date datConcessao3) {
        this.datConcessao3 = datConcessao3;
    }

    public String getDesDescricao() {
        return desDescricao;
    }

    public void setDesDescricao(String desDescricao) {
        this.desDescricao = desDescricao;
    }

    public String getDesDespacho() {
        return desDespacho;
    }

    public void setDesDespacho(String desDespacho) {
        this.desDespacho = desDespacho;
    }

    public Date getDesData() {
        return desData;
    }

    public void setDesData(Date desData) {
        this.desData = desData;
    }

    public String getDesMotivo() {
        return desMotivo;
    }

    public void setDesMotivo(String desMotivo) {
        this.desMotivo = desMotivo;
    }

    @Override
    public int compareTo(Processo o) {
        int valor = datUpdate.compareTo(o.datUpdate);
        return (valor != 0 ? valor : 1);
    }
    
}
